package com.z.httpservicetest.utils;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.transport.http.impl.httpclient3.HttpTransportPropertiesImpl;
 
/**
 *
 * @ClassName: MobileClientDoc
 * @Description: TODO
 * 方法二： 应用document方式调用 用ducument方式应用现对繁琐而灵活。现在用的比较多。因为真正摆脱了我们不想要的耦合
 * 即使用org.apache.axis2.client.ServiceClient类进行远程调用web服务，不生成客户端
 *
 * @date 2017年11月9日 下午1:27:17
 *
 */
public class SoapAxis2Client {
    private static String requestName = "getCountryCityByIp";

    public static void ipWS() {
        try {
            ServiceClient serviceClient = new ServiceClient();
            //创建服务地址WebService的URL,注意不是WSDL的URL
            String url = "http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx";
            EndpointReference targetEPR = new EndpointReference(url);
            Options options = serviceClient.getOptions();
            options.setTo(targetEPR);
            //确定调用方法（wsdl 命名空间地址 (wsdl文档中的targetNamespace) 和 方法名称 的组合）
            options.setAction("http://WebXml.com.cn/" + requestName);
            //设置密码
            HttpTransportPropertiesImpl.Authenticator auth = new HttpTransportPropertiesImpl.Authenticator();
//            auth.setUsername(username);  //服务器访问用户名
//            auth.setPassword(password); //服务器访问密码
//            options.setProperty(HTTPConstants.AUTHENTICATE, auth);

            OMFactory fac = OMAbstractFactory.getOMFactory();
            /*
             * 指定命名空间，参数：
             * uri--即为wsdl文档的targetNamespace，命名空间
             * perfix--可不填
             */
            OMNamespace omNs = fac.createOMNamespace("http://WebXml.com.cn/", "");
            // 指定方法
            OMElement method = fac.createOMElement(requestName, omNs);
            // 指定方法的参数
            OMElement theIpAddress = fac.createOMElement("theIpAddress", omNs);
            theIpAddress.setText("111.249.198.56");
//            OMElement userID = fac.createOMElement("userID", omNs);
//            userID.setText("");
            method.addChild(theIpAddress);
//            method.addChild(userID);
            method.build();

            //远程调用web服务
            OMElement result = serviceClient.sendReceive(method);
            //值得注意的是，返回结果就是一段由OMElement对象封装的xml字符串。
            String xml = result.cloneOMElement().toString();
            System.out.println(xml);

        } catch (AxisFault axisFault) {
            axisFault.printStackTrace();
        }
    }
    public static void main(String[] args) throws AxisFault {
        ipWS();
    }
 
 
}